package com.zhentao;

import java.util.Arrays;

public class AlgorithmAndPatternDemo {
    public static void main(String[] args) {
        // 1. 冒泡排序算法
        System.out.println("===== 冒泡排序算法 =====");
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        System.out.println("排序前数组: " + Arrays.toString(arr));

        // 调用冒泡排序方法
        bubbleSort(arr);
        System.out.println("排序后数组: " + Arrays.toString(arr));

        // 2. 斐波那契数列计算（递归方式）
        System.out.println("\n===== 斐波那契数列 =====");
        int n = 10;
        System.out.println("斐波那契数列第 " + n + " 项的值为: " + fibonacci(n));










        // 3. 单例设计模式演示
        System.out.println("\n===== 单例设计模式 =====");
        // 获取单例实例
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();

        // 验证两个实例是否相同
        System.out.println("Singleton1: " + singleton1);
        System.out.println("Singleton2: " + singleton2);
        System.out.println("两个实例是否相同: " + (singleton1 == singleton2));

        // 调用单例方法
        singleton1.showMessage();
    }

    // 冒泡排序算法实现
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换元素
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    // 斐波那契数列递归实现
    public static int fibonacci(int n) {
        if (n <= 1) {
            return n;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

// 单例设计模式实现（懒汉式，线程安全）
class Singleton {
    // 私有静态实例
    private static Singleton instance;

    // 私有构造函数，防止外部实例化
    private Singleton() {}

    // 公有静态方法获取实例
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    // 单例方法
    public void showMessage() {
        System.out.println("这是一个单例对象的方法");
    }
}
